class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) 
    {
        //dp[i][j]代表从00位置开始到达i，j位置的数字总和最小路径的和
        int m = grid.size();
        int n = grid[0].size();
        vector<vector<int>> dp(m+1,vector<int>(n+1,0));
        //需要将第一行和第一列初始化为很大的值,防止影响到正常的填表
        for(int i = 0;i<=m;i++)
        {
            dp[i][0] = INT_MAX;
        }
        for(int j = 0;j<=n;j++)
        {
            dp[0][j] =  INT_MAX;
        }
        dp[1][1] = grid[0][0];
        for(int i = 1;i<=m;i++) 
        {
            for(int j = 1;j<=n;j++)
            {
                if(i == 1&&j == 1)
                {
                    continue;
                }
                dp[i][j] = min(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
            }
        }  
        return dp[m][n];
    }
};